package cn.iocoder.yudao.module.project.service.productioncode;

import java.util.*;
import javax.validation.*;
import cn.iocoder.yudao.module.project.controller.admin.productioncode.vo.*;
import cn.iocoder.yudao.module.project.dal.dataobject.productioncode.ProductionCodeDO;
import cn.iocoder.yudao.framework.common.pojo.PageResult;

/**
 * 成品码信息 Service 接口
 *
 * @author 芋道源码
 */
public interface ProductionCodeService {

    /**
     * 创建成品码信息
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    String createProductionCode(@Valid ProductionCodeSaveReqVO createReqVO);

    /**
     * 更新成品码信息
     *
     * @param updateReqVO 更新信息
     */
    void updateProductionCode(@Valid ProductionCodeSaveReqVO updateReqVO);

    /**
     * 删除成品码信息
     *
     * @param id 编号
     */
    void deleteProductionCode(String id);

    /**
     * 获得成品码信息
     *
     * @param id 编号
     * @return 成品码信息
     */
    ProductionCodeDO getProductionCode(String id);

    /**
     * 获得成品码信息分页
     *
     * @param pageReqVO 分页查询
     * @return 成品码信息分页
     */
    PageResult<ProductionCodeDO> getProductionCodePage(ProductionCodePageReqVO pageReqVO);




    /**
     * 下线装箱扫描
     * @param createReqVO
     * @return
     */
    String boxScan(ProductionCodeSaveReqVO createReqVO);

    /**
     * 成品追溯报表
     * @return
     */
    List<ProductRetrospectVO> selectProductRetrospect(Map<String, Object> params);
    Long countProductRetrospect(Map<String, Object> params);

    /**
     * 不良品报表
     * @return
     */
    List<DefectiveProductVO> selectDefectiveProduct(Map<String, Object> params);
    Long countDefectiveProduct(Map<String, Object> params);

    /**
     * 物料批次报表
     * @return
     */
    List<MaterialBatchVO> selectMaterialBatch(Map<String, Object> params);
    Long countMaterialBatch(Map<String, Object> params);

    /**
     * 刚性测试报表
     * @return
     */
    List<DefectiveProductVO> selectMaterialRigidity(Map<String, Object> params);
    Long countMaterialRigidity(Map<String, Object> params);

    /**
     * 入库报表
     * @return
     */
    List<MaterialReceiptVO> selectMaterialReceipt(Map<String, Object> params);
    Long countMaterialReceipt(Map<String, Object> params);

    /**
     * 出库报表
     * @return
     */
    List<MaterialDeliveryVO> selectMaterialDelivery(Map<String, Object> params);
    Long countMaterialDelivery(Map<String, Object> params);

    /**
     * 实时生产列表
     * @return
     */
    List<RealtimeProductVO> selectRealtimeProduct();

    /**
     * 统计当日入库数量,出库数量,生产数量,不良品数量
     * @return
     */
    StatisticsVO selectStatisticsNum(String queryDate);

    /**
     * 根据订单号查询已出库的产品数量
     * @param params
     * @return
     */
    Integer selectProDuctNumByOrderCode(Map<String, Object> params);

    void updateProductionCodeKey(UpdatedProductionCodeVO updatedProductionCodeVO);
}
